#ifndef PID_H
#define PID_H

#include "main.h"

// ????PI??????????
typedef struct
{
    uint8_t Kp;          // ?????????????????????????????????
    uint8_t Ki;          // ?????????????????????????????????
    uint8_t Kd;          // ????????????????????????????????

    int8_t scaling;    // ???????????????????????????? 
    int16_t prev_error; // ????��???????16��???????????????????
    int16_t integral;   // ????????16��??????
    
} IncrementalPIController;

void IncrementalPI_Init(IncrementalPIController *pi, uint8_t Kp, uint8_t Ki);

void IncrementalPID_Init(IncrementalPIController *pi, uint8_t Kp, uint8_t Ki, uint8_t Kd);

uint8_t IncrementalPI_Compute(IncrementalPIController *pi, uint16_t setpoint, uint16_t measured_value, uint8_t max_output);


#endif
